// G4提供的头文件
#include "G4ParticleTable.hh"
#include "G4SystemOfUnits.hh"
// 用户编写的头文件
#include "G4StartPrimaryGeneratorAction.hh"


// 构造函数
G4StartPrimaryGeneratorAction::G4StartPrimaryGeneratorAction(){
    // 定义一个粒子源，并规定一次只能打出一个粒子
    particleGun = new G4ParticleGun(1);

    // 生成粒子源查找表
    auto table = G4ParticleTable::GetParticleTable();

    // 设置打出粒子的类型，规定打出中子
    particleGun->SetParticleDefinition(table->FindParticle("neutron"));
    // 设置粒子的能量
    particleGun->SetParticleEnergy(10 * MeV);
    // 设置粒子源位置
    particleGun->SetParticlePosition(G4ThreeVector(-20*cm,0,0));
    // 设置粒子源发射方向
    particleGun->SetParticleMomentumDirection(G4ThreeVector(1,0,0));
}
// 析构函数
G4StartPrimaryGeneratorAction::~G4StartPrimaryGeneratorAction(){
    delete particleGun;
}

// 事件生成函数
void G4StartPrimaryGeneratorAction::GeneratePrimaries(G4Event* e){

    // 发射粒子
    particleGun->GeneratePrimaryVertex(e);
    
}